package com.pan.admin.generator.strategy;

import com.pan.admin.generator.config.ApiGenFieldTemplateConfig;
import com.pan.admin.generator.entity.ApiGenField;
import com.pan.admin.generator.entity.ApiGenTemplate;
import org.apache.velocity.VelocityContext;

import java.util.List;
import java.util.Map;

/**
 *  策略实现
 *
 *  @author Pan
 */
public interface ApiGenStrategy {

    /**
     *  视图模板
     *
     *  @param  apiGenTemplate  模板对象
     *  @param  vmContext       已解析模板上下文
     *  @return Map 已渲染模板方法
     */
    Map<String, String> viewTemplate(ApiGenTemplate apiGenTemplate, VelocityContext vmContext);

    /**
     *  解析生成模板上下文
     *
     *  @param  apiGenTemplate   模板对象
     *  @param  vmContext        vm上下文
     */
    void parseGenTemplateContext(ApiGenTemplate apiGenTemplate, VelocityContext vmContext);

    /**
     *  获取模板
     *
     *  @param  customName  自定义名称
     *  @return Map
     */
    Map<String, String> listTemplate(String customName);

    /**
     *  获取生成文件名称
     *
     *  @param  vmTemplateName   vm模板名称
     *  @param  customName       自定义名称
     *  @return String
     */
    String getFileName(String vmTemplateName, String customName);

    /**
     *  获取模板字段集合
     *
     *  @param  apiGenFieldTemplateConfig   字段模板配置
     *  @return List
     */
    List<ApiGenField> listFieldTemplate(ApiGenFieldTemplateConfig apiGenFieldTemplateConfig);
}
